package de.hochschuletrier.bachelor.antfarm.entity.ant;

import java.awt.Point;
import java.util.ArrayList;
import java.util.HashMap;

import de.hochschuletrier.bachelor.antfarm.entity.Ant;
import de.hochschuletrier.bachelor.antfarm.entity.mes.ActionMessageGroup;

public class Searchstate extends Antstate {
	public Searchstate(Ant ant) {
		ant.getMessages().clear();
	}

	@Override
	public void perform(final Ant ant) {
		ActionMessageGroup g = new ActionMessageGroup();

		// Mögliche Richtungen ausloten
		ArrayList<Point> possibleDirections = getDirections(ant, g);

		// Aus dem Level herauslaufen verhindern
		possibleDirections = preventGettingOutOfLevel(possibleDirections, ant, g);

		// Prüfen, ob Ziel in der Nähe ist
		getToFoodsource(possibleDirections, ant, g);

		// Pheromone beachten
		//possibleDirections = lookForPheromons(possibleDirections, ant, g, false);
		HashMap<Point, Integer> weightMap = evaluateFewestPheromons(possibleDirections, ant, g);

		// Bisherige Richtung zum Nest beibehalten
		weightMap = holdDirectionToNest(possibleDirections, ant, weightMap, g, true);

		// Letzte Richtung entfernen
		//possibleDirections = removeLastDirections(possibleDirections, ant, g);
		weightMap = evaluateLastDirections(possibleDirections,ant,weightMap,g);

		// Bewegung möglichst gerade und nicht quer halten
		weightMap = doEasyMove(possibleDirections, ant, weightMap, g);
		
		// Zufall mindern
		weightMap = lessLuckCheck(possibleDirections, ant, weightMap, g);

		// Richtungen ausgeben
		echoDirections(possibleDirections, ant, weightMap, g);

		// Bewegung durchführen
		doMove(possibleDirections, ant, weightMap, g);
	}

	@Override
	public String getName() {
		return "Searching";
	}
}
